Step 28: Test BookmarkDAO

Here I have update the tests in the tests/data/BookmarkDAO.test.js file so that we use the test database for testing the Bookmark DAO.

import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest"; import BookmarkDAO from "../../src/data/BookmarkDAO.js"; import { faker } from "@faker-js/faker"; import Bookmark from "../../src/model/Bookmark.js"; import * as db from "../../src/data/db.js"; import * as dotenv from "dotenv"; import mongoose from "mongoose"; import { bookmarkDao } from "../../src/routes/bookmarks.js"; dotenv.config(); const bookmarkDAO = new BookmarkDAO(); describe("Test BookmarkDAO", () => { const numBookmarks = 5; let bookmarks; beforeAll(async () => { db.connect(process.env.DB_TEST_URI); await bookmarkDao.deleteAll(); }); beforeEach(async () => { await bookmarkDAO.deleteAll(); bookmarks = []; for (let index = 0; index < numBookmarks; index++) { const bookmark = await Bookmark.create({ title: faker.lorem.sentence(), url: faker.internet.url(), }); bookmarks.push(bookmark); } }); it("test create()", async () => { const title = faker.lorem.sentence(); const url = faker.internet.url(); const _bookmark = await bookmarkDAO.create({ title, url }); expect(_bookmark.title).toBe(title); expect(_bookmark.url).toBe(url); expect(_bookmark.id).toBeDefined(); }); it("test readAll()", async () => { const _bookmarks = await bookmarkDAO.readAll({}); expect(_bookmarks.length).toBe(bookmarks.length); }); it("test read() given valid ID", async () => { const index = Math.floor(Math.random() * numBookmarks); const bookmark = bookmarks[index]; const _bookmark = await bookmarkDAO.read(bookmark.id); expect(_bookmark.title).toBe(bookmark.title); expect(_bookmark.url).toBe(bookmark.url); expect(_bookmark.id).toBe(bookmark.id); }); it("test read() given invalid ID", async () => { const _bookmark = await bookmarkDAO.read( mongoose.Types.ObjectId().toString() ); expect(_bookmark).toBeNull(); }); it("test update() given valid ID", async () => { const index = Math.floor(Math.random() * numBookmarks); const bookmark = bookmarks[index]; const _bookmark = await bookmarkDao.update({ id: bookmark._id, title: "updated title", url: "update url", }); expect(_bookmark.title).toBe("updated title"); expect(_bookmark.url).toBe("update url"); expect(_bookmark.id).toBe(bookmark.id); }); it("test update() given invalid ID", async () => { const _bookmark = await bookmarkDAO.update({ id: mongoose.Types.ObjectId().toString(), }); expect(_bookmark).toBeNull(); }); it("test delete() given valid ID", async () => { const index = Math.floor(Math.random() * numBookmarks); const bookmark = bookmarks[index]; const _bookmark = await bookmarkDao.delete(bookmark._id); expect(_bookmark.title).toBe(bookmark.title); expect(_bookmark.url).toBe(bookmark.url); expect(_bookmark.id).toBe(bookmark.id); }); it("test delete() given invalid ID", async () => { const _bookmark = await bookmarkDAO.delete(mongoose.Types.ObjectId()); expect(_bookmark).toBeNull(); }); afterAll(async () => { await bookmarkDao.deleteAll(); }); });